package today.belief.mole.api;


/**
 * @Author LXH
 * @Date 2021/7/8
 * @Description 状态码对象
 */
public interface Status {

    /**
     * 状态码
     *
     * @return 状态码
     */
    Integer code();

    /**
     * 状态码的释义
     *
     * @return 状态码的释义
     */
    String explanation();

    /**
     * 运行时不同的情况的详细描述
     * 如：code-400，explanation-参数错误，message-参数‘password’不符合规则
     *
     * @return 描述内容
     */
    String message();

    enum ApiStatus implements Status {
        //
        SUCCESS(0, "成功"),
        FAILED(-1, "系统异常"),
        ;

        /**
         * 状态码
         */
        private final Integer code;
        /**
         * 状态码的释义
         */
        private final String explanation;
        /**
         * 运行时不同的情况的详细描述
         */
        private String message;

        ApiStatus(Integer code, String explanation) {
            this.code = code;
            this.explanation = explanation;
        }

        /**
         * 设置运行时针对不同的情况的详细描述内容
         *
         * @param message 详细描述内容
         * @return 状态对象
         */
        public ApiStatus message(String message) {
            this.message = message;
            return this;
        }

        @Override
        public Integer code() {
            return code;
        }

        @Override
        public String explanation() {
            return explanation;
        }

        @Override
        public String message() {
            return message;
        }
    }
}
